package com.sg.dto.biz.app.req;

import com.sg.dto.base.app.common.VirtualOrgMemberDto;
import com.sg.dto.biz.app.common.CoterieMemberDto;
import com.sg.dto.biz.app.common.EvaObjTargetCycleDto;
import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @desc ImplementGainInParameterFieldsReqDto
 * @使用场景
 */
@Data
public class ImplementGainInParameterFieldsReqDto
        extends BaseDto
        implements Serializable {

    /**
     * 自定义字段
     */
    @NotNull(message = "自定义字段不能为空")
    @ApiModelProperty("自定义字段")
    private String customField;
    /**
     * 被评对象内容表类型编码 OMS_TARGET_CYCLE:目标周期表 OMS_EVALUATION_OBJECT_TARGET_CYCLE:被评对象目标周期表 OMS_TARGET:目标表 OMS_TARGET_CATEGORY:目标分类表 OMS_TARGET_OBJECTIVE:指标表 OMS_TASK:任务表 OMS_ORG_INDUCTION_RECORD:就职记录表 OMS_FRAMEWORK_ORIGINAL_ROLE_MEMBER:身份人员表 OMS_ORG_DEPT:部门表 OMS_BASE_HOST:宿主表 OMS_FRAMEWORK_SPACE:空间表 OMS_TSPE_CYCLE_STAGE_DATA:周期阶段资料记录 OMS_EVALUATION_TEMPLATE:评价模板 OMS_EVALUATION_PORTRAIT:评价画像表 OMS_ORG_POSITION:职务表 OMS_VIRTUAL_ORG_MEMBER:虚拟组织成员表 OMS_PLANNING:规划资料表 OMS_FRAMEWORK_USERS:个人账号表 OMS_EXECUTE_CYCLE_STAGE:执行周期阶段表 OMS_CONF_SCHEME:配置方案表 OMS_EVA_OBJ_TARGET_CYCLE_OSET:被评对象目标周期目标设置表 OMS_EVA_OBJ_TARGET_CYCLE_WEIGHT_SET:被评对象目标周期权重设置表 OMS_NOTICE:通知公告表 OMS_CYCLE:周期表 OMS_EVALUATION_SUBJECT:评价主题表 OMS_BIZ_APP_BATCH:业务应用批次表 OMS_EVA_BATCH_RELATED_SET:评价模板批次相关设置表 OMS_TARGET_CYCLE_PLAN_SET:目标周期规划设置表 OMS_TARGET_OBJECTIVE_PLAN_EXTEND:指标扩展规划设置表
     */
    @NotNull(message = "被评对象内容表类型编码不能为空")
    @ApiModelProperty("被评对象内容表类型编码")
    private String evaObjTableTypeCode;
    /**
     * 配置项标识
     */
    @NotNull(message = "配置项标识不能为空")
    @ApiModelProperty("配置项标识")
    private String confItemCode;
    /**
     * 层级
     */
    @NotNull(message = "层级不能为空")
    @ApiModelProperty("层级")
    private Long levelNumber;
    /**
     * 执行进度记录ID
     */
    @NotNull(message = "执行进度记录ID不能为空")
    @ApiModelProperty("执行进度记录ID")
    private String executeProgressId;

    /**
     * 异步执行状态 NOT_START:未开始 IN_PROGRESS:进行中 COMPLETED:已完成
     */
    @NotNull(message = "异步执行状态不能为空")
    @ApiModelProperty("异步执行状态")
    private String asyncExecuteState;
    /**
     * 责任主体ID
     */
    @NotNull(message = "责任主体ID不能为空")
    @ApiModelProperty("责任主体ID")
    private String dutyBodyId;
    @ApiModelProperty("圈子成员列表")
    private List<CoterieMemberDto> coterieMemberList = new ArrayList<>();
    /**
     * 批次标识
     */
    @ApiModelProperty("批次标识")
    private String batchCode;

    /**
     * 主体类型编码 ORG_LOG_NAV:组织架构日志导航 DEPT_LOG_NAV:部门日志导航 STATION_TYPE_LOG_NAV:岗位类型日志导航 EVALUATION_TEMPLATE_LOG_NAV:评价模板日志导航 MID_TARGET_DIVISION_LOG_NAV:中层目标分工日志导航 BASIC_TARGET_DIVISION_LOG_NAV:基层目标分工日志导航
     */
    @ApiModelProperty("主体类型编码")
    private String subjectTypeCode;

    /**
     * 主体变更日志类型
     */
    @ApiModelProperty("主体变更日志类型")
    private String subjectChangeType;
    /**
     * 通用数值字段（整数型）
     */
    @ApiModelProperty("通用数值字段（整数型）")
    private Long comNumField;

    /**
     * 通用数值字段1（整数型）
     */
    @ApiModelProperty("通用数值字段1（整数型）")
    private Long comNumField1;

    /**
     * 通用数值字段2（整数型）
     */
    @ApiModelProperty("通用数值字段2（整数型）")
    private Long comNumField2;
    /**
     * 是否已完成 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否已完成不能为空")
    @ApiModelProperty("是否已完成")
    private String isComplete;
    /**
     * 自定义字段1
     */
    @NotNull(message = "自定义字段1不能为空")
    @ApiModelProperty("自定义字段1")
    private String customField1;
    /**
     * 责任主体名称
     */
    @NotNull(message = "责任主体名称 不能为空")
    @ApiModelProperty("责任主体名称 ")
    private String dutyBodyName;
    /**
     * 是否已处理 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否已处理不能为空")
    @ApiModelProperty("是否已处理")
    private String isHandle;
    /**
     * 父子中周期类型 PARENT_CYCLE:父周期 MID_CYCLE:中期 SUB_CYCLE:子周期 PROCESS_CYCLE:过程周期
     */
    @NotNull(message = "父子中周期类型不能为空")
    @ApiModelProperty("父子中周期类型")
    private String parentSubMidCycleType;
    /**
     * 是否 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否不能为空")
    @ApiModelProperty("是否")
    private String tureOrFalse;
    /**
     * 部门排序
     */
    @NotNull(message = "部门排序不能为空")
    @ApiModelProperty("部门排序")
    private Long dutyBodyOrderNum;

    /**
     * 个人排序
     */
    @NotNull(message = "个人排序不能为空")
    @ApiModelProperty("个人排序")
    private Long personalOrderNumber;

    /**
     * 权重排序
     */
    @NotNull(message = "权重排序不能为空")
    @ApiModelProperty("权重排序")
    private Long weightOrderNumber;
    /**
     * 步骤编码
     */
    @NotNull(message = "步骤编码不能为空")
    @ApiModelProperty("步骤编码")
    private String stepNameCode;
    /**
     * 进入步骤房间值
     */
    @NotNull(message = "进入步骤房间值不能为空")
    @ApiModelProperty("进入步骤房间值")
    private String stepRoomValue;
    /**
     * 通用编码标识1
     */
    @NotNull(message = "通用编码标识1不能为空")
    @ApiModelProperty("通用编码标识1")
    private String comCode1;
    /**
     * 模板引擎标识
     */
    @ApiModelProperty("模板引擎标识")
    private String templateSemanticEngineCode;

    /**
     * 是否组织正式财务标准
     */
    @ApiModelProperty("是否组织正式财务标准")
    private String isOrgOfficialAccountNom;
    /**
     * 账户操作类型 ADD_BUDGET:增预算 DEC_BUDGET:减预算 USE_BUDGET:使用预算 AVAILABLE_AMOUNT_EXPENDITURE:可用金额支出 AVAILABLE_AMOUNT_INCOME:可用金额收入
     */
    @ApiModelProperty("账户操作类型")
    private String accountOptType;

    /**
     * 科目ID
     */
    @ApiModelProperty("科目ID")
    private String accountSubjectld;
    /**
     * 是否末级指标 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否末级指标不能为空")
    @ApiModelProperty("是否末级指标")
    private String isLastObjective;
    @ApiModelProperty("被评对象目标周期列表")
    private List<EvaObjTargetCycleDto> evaObjTargetCycleList = new ArrayList<>();
    /**
     * 身份人员ID
     */
    @NotNull(message = "身份人员ID不能为空")
    @ApiModelProperty("身份人员ID")
    private String originalRoleMemberId;
    /**
     * 内容表主键ID
     */
    @NotNull(message = "内容表主键ID不能为空")
    @ApiModelProperty("内容表主键ID")
    private String entityId;

    /**
     * 主体生命周期 CURRENTLY_VALID:当前有效 EDITING:正在编辑 ARCHIVING:历史存档
     */
    @NotNull(message = "主体生命周期不能为空")
    @ApiModelProperty("主体生命周期")
    private String subjectLifeCycle;
    /**
     * 工作任务对象名称
     */
    @NotNull(message = "工作任务对象名称不能为空")
    @ApiModelProperty("工作任务对象名称")
    private String workTaskObjectName;

    /**
     * 接收部门ID
     */
    @NotNull(message = "接收部门ID不能为空")
    @ApiModelProperty("接收部门ID")
    private String receiveSubjectId;

    /**
     * 计划开始时间
     */
    @ApiModelProperty("计划开始时间")
    private Date planStartTime;

    /**
     * 计划结束时间
     */
    @ApiModelProperty("计划结束时间")
    private Date planEndTime;

    /**
     * 总时长
     */
    @ApiModelProperty("总时长")
    private Long totalLength;

    /**
     * 结束时间偏差天数
     */
    @ApiModelProperty("结束时间偏差天数")
    private Long deflectionEndDays;

    /**
     * 前端偏差时间
     */
    @ApiModelProperty("前端偏差时间")
    private Long deflectionTime;

    /**
     * 冗余最新进度
     */
    @ApiModelProperty("冗余最新进度")
    private Double percentageProgress;

    /**
     * 任务进展状态 NOT_AT_THE:未开始 ONGOING:进行中 OVERDUE:已逾期 HAS_ENDED:已结束
     */
    @ApiModelProperty("任务进展状态")
    private String taskStatus;

    /**
     * 完成情况 AHEAD_SCHEDULE:提前完成（提前24h） NORMAL_COMPLETE:正常完成 OVERDUE_COMPLETE:逾期完成
     */
    @ApiModelProperty("完成情况")
    private String completeStatus;

    /**
     * 相关人数量
     */
    @NotNull(message = "相关人数量不能为空")
    @ApiModelProperty("相关人数量")
    private Long relevantPeopleNum;
    /**
     * 个人账号
     */
    @NotNull(message = "个人账号不能为空")
    @ApiModelProperty("个人账号")
    private String userId;

    /**
     * 真实头像
     */
    @NotNull(message = "真实头像不能为空")
    @ApiModelProperty("真实头像")
    private String userFace;

    /**
     * 真实姓名
     */
    @NotNull(message = "真实姓名不能为空")
    @ApiModelProperty("真实姓名")
    private String idCardName;
    /**
     * 周期模式类型编码 FATHER_SON_CYCLE:父子周期 SINGLE_CYCLE:单周期 IRREGULAR_CYCLE:不规则周期
     */
    @NotNull(message = "周期模式类型编码不能为空")
    @ApiModelProperty("周期模式类型编码")
    private String periodicModeTypeCode;

    /**
     * 分工层级设置 TARGET_DIV_LADER_DEPT:目标分工到牵头部门 TARGET_DIV_FIRST_DEPT:目标分工到一级责任部门 TARGET_DIV_BASIC_DEPT:目标分工到基层责任部门 TARGET_DIV_DEPT_UNDER_LADER_DEPT:目标分工到牵头部门下级部门
     */
    @NotNull(message = "分工层级设置不能为空")
    @ApiModelProperty("分工层级设置")
    private String targetDivTierSet;

    /**
     * 权重设置方式
     */
    @NotNull(message = "权重设置方式不能为空")
    @ApiModelProperty("权重设置方式")
    private String weightSetWay;

    /**
     * 是否进度型评价模板 TRUE:是 FALSE:否
     */
    @NotNull(message = "是否进度型评价模板不能为空")
    @ApiModelProperty("是否进度型评价模板")
    private String isProgressTemp;
    @ApiModelProperty("工作内容列表 ")
    List<String> workContentList = new ArrayList<>();
    /**
     * 工作任务是否已安排 TRUE:是 FALSE:否
     */
    @ApiModelProperty("工作任务是否已安排")
    private String workTaskIsArrange;

    /**
     * 指定工作任务安排人就职记录ID
     */
    @ApiModelProperty("指定工作任务安排人就职记录ID")
    private String appointWorkTaskArrangeInductionId;
    /**
     * 通用数值字段3（整数型）
     */
    @NotNull(message = "通用数值字段3（整数型）不能为空")
    @ApiModelProperty("通用数值字段3（整数型）")
    private Long comNumField3;

    /**
     * 通用数值字段4（整数型）
     */
    @NotNull(message = "通用数值字段4（整数型）不能为空")
    @ApiModelProperty("通用数值字段4（整数型）")
    private Long comNumField4;

    /**
     * 通用数值字段5（整数型）
     */
    @NotNull(message = "通用数值字段5（整数型）不能为空")
    @ApiModelProperty("通用数值字段5（整数型）")
    private Long comNumField5;
    /**
     * 消息重要紧急度层级
     */
    @NotNull(message = "消息重要紧急度层级不能为空")
    @ApiModelProperty("消息重要紧急度层级")
    private Long messageImportantLevel;
    /**
     * 是否逾期 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否逾期")
    private String isOverdue;
    /**
     * 处理类型 NO_NEED_HANDLING:不需要处理 NEED_HANDLING:需要处理 NEED_BUSINESS_OPERATION_HANDLING:需要业务操作处理
     */
    @NotNull(message = "处理类型不能为空")
    @ApiModelProperty("处理类型")
    private String handleType;
    /**
     * 安排主体ID
     */
    @ApiModelProperty("安排主体ID")
    private String arrangeSubjectId;

    /**
     * 安排主体类型编码 OMS_ORG_ORGANIZATION:组织表 OMS_ORG_DEPT:部门表
     */
    @ApiModelProperty("安排主体类型编码")
    private String arrangeSubjectTypeCode;
    /**
     * 业务操作类型编码 REPORT_UP:向上汇报 NOT_REPORT_UP:不向上汇报
     */
    @NotNull(message = "业务操作类型编码不能为空")
    @ApiModelProperty("业务操作类型编码")
    private String businessOperationTypeCode;
    @ApiModelProperty("消息列表 ")
    List<String> messageList = new ArrayList<>();
    /**
     * 创建人就职记录ID
     */
    @NotNull(message = "创建人就职记录ID不能为空")
    @ApiModelProperty("创建人就职记录ID")
    private String createInductionId;

    /**
     * 创建于空间ID
     */
    @NotNull(message = "创建于空间ID不能为空")
    @ApiModelProperty("创建于空间ID")
    private String spaceId;

    /**
     * 创建于联盟应用ID
     */
    @NotNull(message = "创建于联盟应用ID不能为空")
    @ApiModelProperty("创建于联盟应用ID")
    private String appId;
    @ApiModelProperty("虚拟组织成员列表")
    private List<VirtualOrgMemberDto> virtualOrgMemberList = new ArrayList<>();


}
